<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@page import="com.utils.HttpUtils"%>
<%@page import="java.net.URL"%>
<%@page import="java.util.Map"%>
<%@page import="java.util.HashMap"%>
<%@page import="java.security.MessageDigest"%><html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>pay</title>
</head>
<body>
<%
int mz = 0;  //面值
String uid = ""; //用户ID
String mob = "";//手机号码
String md5 = ""; //商户APP 与 商户服务端是否一致的效验
String oid = "";//  商户订单
try
{
   //SDK接口 向商户服务器提交数据 http://商户域名或IP/Server_App.aspx?mz=5&md5=7528D398140798400143D15C9B87BF05&uid=273647&oid=10000000001&mob=13511351020
    mz = Integer.parseInt(request.getParameter("mz"));
    uid = request.getParameter("uid");
    mob = request.getParameter("mob");
    String sign = request.getParameter("md5");
    oid = request.getParameter("oid");//  商户订单
//面值固定 5 10 15 20 30  订单唯一 不能反复提交 用户ID必须与数据库一致等等 
//订单 面值 MD5 必须效验一致 
//  if(验证面值 + 验证订单 +验证用户ID)
 //   {
//	    string 商户自己定义鉴权串="dgrdgerr@@rwgrehrthtyjtyjgggjmf";
//      if (sign.ToUpper() == md5Key(面值 + 商户自己定义鉴权串 + 用户ID + 商户唯一订单, 32).ToUpper())
//        {
        //商户业务逻辑编写
		//参考文档 商户服务端WEB接口规范(SDK).doc
		//处理业务逻辑 并向
		//	GET提交地址：“http://ydzf.vnetone.com/Default_sdk.aspx”
		//接口参数
		//如：http://ydzf.vnetone.com/Default_sdk.aspx?sp=" +参数 + "&od=" + 参数 + "&mz=" + 参数+ "&md5=" +参数 + "&spreq=" +参数+ "&spsuc=" +参数 + "&spzdy=" + 参数+"&mob="+参数+&uid="+参数;
       String result=  appInfo(oid,mz,mob,uid);
       out.write(result);

//	  }
 /**       else
        {
           Response.Write("yhxffail|鉴权失败");  //失败用固定格式 "yhxffail|" 开头 后面是 客户端上提示内容
        }
    }
    else
    {
        Response.Write("yhxffail|面值订单等数据不符合");//失败用固定格式 "yhxffail|" 开头 后面是 客户端上提示内容
    }**/
}
catch(Exception ex)
{
	out.write("yhxffail|数据异常"+ex.getMessage());//失败用固定格式 "yhxffail|" 开头 后面是 客户端上提示内容
}
%>
<%!
protected String appInfo(String orderid,int mz,String mob,String uid)
{
	String spid = "xxxxx"; //盈华讯方分配5位SP号码
	String sppwd = "xxxxxxxxxxxxxxxxxx";//盈华讯方分配18位SP通讯密钥
	String od = orderid;
	String spreq = "ddd";
	String spsuc = "bbb";
	String spzdy = "android";


	String md5s = spid + od + sppwd + mz + spreq + spsuc + mob;
	String md5 = md5Key(md5s, 32);

    //http://ydzf.vnetone.com/Default_app.aspx?
    String senddata = "sp=" + spid + "&od=" + od + "&mz=" + mz + "&md5=" + md5 + "&spreq=" + spreq + "&spsuc=" + spsuc + "&spzdy=" + spzdy + "&mob=" + mob + "&uid=" + uid;

    String str = send_("http://ydzf.vnetone.com/Default_sdk.aspx", senddata);
    return str;
}

public String send_(String url, String message)
{
	String content = "";
	try{
		URL u = new URL(url);
		Map<Object, Object> headers = new HashMap<Object, Object>(); 
		headers.put("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
		headers.put("Content-Length", message.length());
		byte[] resContent = HttpUtils.webPost(u,message.getBytes(),headers, 2000, 2000);
		 
		String resEncoding = (String)headers.get("Encoding");
		content = new String(resContent,resEncoding);
	}catch(Exception ex)
	{
	}
    return content;
}
public static String md5Key(String str, int code)
{
	// 返回字符串
	String md5Str = null;
	try {
		// 操作字符串
		StringBuffer buf = new StringBuffer();
		MessageDigest md = MessageDigest.getInstance("MD5");
		// 添加要进行计算摘要的信息,使用 plainText 的 byte 数组更新摘要。
		md.update(str.getBytes());
		// 计算出摘要,完成哈希计算。
		byte b[] = md.digest();
		int i;
		for (int offset = 0; offset < b.length; offset++) {
			i = b[offset];
			if (i < 0) {
			i += 256;
		}
		if (i < 16) {
			buf.append("0");
		}
		// 将整型 十进制 i 转换为16位，用十六进制参数表示的无符号整数值的字符串表示形式。
		buf.append(Integer.toHexString(i));
		}
		// 32位的加密
		if(code==32)
		{
			md5Str = buf.toString();
		}else
		{
			// 16位的加密
			md5Str = buf.toString().substring(8,24);
		}
	} catch (Exception e) {
	e.printStackTrace();
	}
	return md5Str;
}

%>
</body>
</html>